package com.ubing.boot.notesforjava.utils;

import com.ubing.boot.notesforjava.annotation.Sensitive;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Map;

public interface SensitiveImpl {
     default void isSensitive(){
        Field[] declaredFields = this.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            Sensitive annotation = field.getAnnotation(Sensitive.class);
            if(annotation!=null){
                /**
                 * public static InvocationHandler getInvocationHandler(Object proxy)
                 * 参数：
                 * proxy - 代理实例返回的调用处理程序。
                 * 返回值 - 代理实例的调用处理程序。
                 * 异常 - IllegalArgumentException - 如果参数不是代理实例则抛出此异常。
                 */
                InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);// annotation为代理类，
                try {
                    Field memberValues = invocationHandler.getClass().getDeclaredField("memberValues");
                    memberValues.setAccessible(true);
                    Map map = (Map) memberValues.get(invocationHandler);
                    map.put("isSensitive",true);
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                }catch (IllegalAccessException e) {
                    e.printStackTrace();
                }

            }
        }
    }
}
